# -*- coding: utf-8 -*-#
"""
@File : 01-softmax归一化(尖锐和平滑).py
@Description : 
@Author : Le.Qing
@Create Time : 2025-05-08 8:48
"""
import torch
import torch.nn.functional as F
import numpy as np
inputs = np.array([[2.0, 1.0, 0.1]])
# softmax归一化
temperature = 1   # 尖锐分布，第一项主导
logits = torch.tensor(inputs / temperature)
softmax_scores = F.softmax(logits, dim=1)
print(f"temperature = {temperature} {softmax_scores.cpu().numpy()}")
print("--"*50)
temperature = 10  # 平滑分布，三项接近
logits = torch.tensor(inputs / temperature)
softmax_scores = F.softmax(logits, dim=1)
print(f"temperature = {temperature} {softmax_scores.cpu().numpy()}")

# 实际应用场景
# 文本生成（如ChatGPT）：
# 低temperature：生成更确定、保守的文本
# 高temperature：生成更多样化、更有创意的文本（但可能不合逻辑）
# 知识蒸馏： 用高temperature让教师模型输出更平滑的分布，使学生模型更容易学习
# 强化学习： 调整策略的探索（高T）与利用（低T）平衡
# 极端现象：
# temperature = 0.1  # 会得到接近[1,0,0]
# temperature = 100   # 会接近[0.333, 0.333, 0.333]
